﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ServiceSATT;
using ApplicationContext;

namespace UI_SATT
{
    public partial class FrmEventos : Form, IListadoEventos, IInterfazEventos, IListadoClub
    {
        string ImplementaEventos = "EventoService";
        string ImplementaClubes = "ClubService";
        IEventoService Servicio;
        IClubService clubServicio;
        int IdEventoActual;

        public FrmEventos()
        {
            InitializeComponent();
        }

        private void FrmEventos_Load(object sender, EventArgs e)
        {
            Servicio = (IEventoService)AppContext.Instance.GetObject(ImplementaEventos);
            Servicio.Listar(this);
            clubServicio = (IClubService)AppContext.Instance.GetObject(ImplementaClubes);
        }

        #region Miembros de IListadoEventos

        public List<string> ListaEventos
        {
            set 
            {
                if (value.Count > 0)
                {
                    btnModificar.Enabled = true;
                    if (CboEventos.Items.Count > 0)
                        CboEventos.Items.Clear();
                    foreach (string valor in value)
                    {
                        CboEventos.Items.Add(valor);
                    }
                    CboEventos.SelectedIndex = -1;
                }
                else
                {
                    btnModificar.Enabled = false;
                }
            }
        }

        #endregion

        #region Miembros de IInterfazEventos

        public int IdEvento 
        {
            get { return IdEventoActual; }
            set { IdEventoActual = value; }
        }

        public string Nombre
        {
            get { return txtNombre.Text; }
        }

        public string Anfitrion
        {
            get
            {
                return cmbClub.SelectedItem.ToString();
            }
            set
            {
                cmbClub.SelectedItem = value;
            }
        }

        public DateTime FechaInicio
        {
            get
            {
                return dtpFechaInicio.Value;
            }
            set
            {
                dtpFechaInicio.Value = value;
            }
        }

        public DateTime FechaFin
        {
            get
            {
                return dtpFechaFin.Value;
            }
            set
            {
                dtpFechaFin.Value = value;
            }
        }

        public bool Estado
        {
            get
            {
                return chkHabilitado.Checked;
            }
            set
            {
                chkHabilitado.Checked = value;
            }
        }

        #endregion

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            gbEventos.Text = "Nuevo";
            gbEventos.Enabled = true;
            chkHabilitado.Checked = true;
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (CboEventos.SelectedIndex > -1)
            {
                gbEventos.Text = "Modificar";
                gbEventos.Enabled = true;
                txtNombre.Text = CboEventos.SelectedItem.ToString();
                Servicio.Buscar(this);
            }
            else
                MessageBox.Show("Seleccione un Evento del desplegable y vuelva a presionar el botón.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnGuardarCambios_Click(object sender, EventArgs e)
        {
            if (cmbClub.SelectedIndex > -1 && txtNombre.Text != "")
            {
                if (dtpFechaInicio.Value > dtpFechaFin.Value)
                {
                    if (gbEventos.Text == "Nuevo")
                        Servicio.Agregar(this);
                    else if (gbEventos.Text == "Modificar")
                        Servicio.Modificar(this);
                    Servicio.Listar(this);
                    dtpFechaInicio.Value = DateTime.Now;
                    dtpFechaFin.Value = DateTime.Now;
                    txtNombre.Text = "";
                    cmbClub.DataSource = null;
                    gbEventos.Text = "";
                    gbEventos.Enabled = false;
                    this.DialogResult = DialogResult.OK;
                }
                else
                    MessageBox.Show("La Fecha de Inicio no puede ser después de la Fecha de Fin");
            }
            else
                MessageBox.Show("Complete todos los campos antes de continuar.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }

        private void gbEventos_EnabledChanged(object sender, EventArgs e)
        {
            if (gbEventos.Enabled)
                clubServicio.ListaClub(this);
        }

        #region Miembros de IListadoClub

        public string NombreFederacion
        {
            get { return ""; }
        }

        public string[][] LstClub
        {
            set 
            {
                if (cmbClub.Items.Count > 0)
                    cmbClub.Items.Clear();
                foreach (string[] valor in value)
                {
                    cmbClub.Items.Add(valor[0]);
                }
                cmbClub.SelectedIndex = -1; 
            }
        }

        #endregion

        private void btnNuevoClub_Click(object sender, EventArgs e)
        {
            FrmListaClubes clubes = new FrmListaClubes();
            if(clubes.ShowDialog() == DialogResult.OK)
                clubServicio.ListaClub(this);
        }

        private void cmbClub_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }
    }
}
